/**
* 模块名: pinia 类似vuex
* 代码描述: 全局状态管理,前台使用，后台没必要
* 作者:lizibin
* 创建时间:2023/01/18 21:32:27
* 请忽略TS不兼容的报错！！！！！！！！！！！！！！！
*/
import { defineStore } from 'pinia'
import {
  GetAllArticleInfo,
  GetSystemSetup,
  Login
} from '@/api/foreground/index'
import {
  Res,
  OutLoginItf,
  InLoginItf,
  ResData,
  OutGetAllArticleInfoItf,
  GetSystemSetupItf
} from '@/api/foreground/types'
import Cookie from 'js-cookie'
export const useStore = defineStore('store', {
  /**
     * 类似组件的 data, 用于存储全局的的状态
     * 注意:
     *    1.必须是函数, 为了在服务端渲染的时候避免交叉请求导致的数据交叉污染
     *    2.必须是箭头函数, 为了更好的 TS 类型推导
     */
  state: () => {
    return {
      // 全部文章
      AllArticleInfo: <ResData<OutGetAllArticleInfoItf>>{},
      // 系统设置
      SystemSetup: <Res<GetSystemSetupItf>>{},
      // 登录信息
      LoginInfo: <Res<OutLoginItf>>{},
    }
  },
  /**
     * 类似组件的 computed, 用来封装计算属性, 具有缓存特性
     */
  getters: {

  },
  /**
     * 类似组件的 methods, 封装业务逻辑, 修改state
     * 注意: 里面的函数不能定义成箭头函数(函数体中会用到this)
     */
  actions: {
    async getAllArticleInfo() {
      const result = await GetAllArticleInfo()
      this.AllArticleInfo = result
    },
    async getSystemSetup() {
      const result = await GetSystemSetup()
      this.SystemSetup = result
    },
    async getLoginInfo(data: InLoginItf) {
      const result = await Login(data)
      this.LoginInfo = result
      if (result.code === 0) {
        Cookie.set('LoginState', 'yes', { expires: 1 });
        Cookie.set('LoginId', result.data.data[0].userId, { expires: 1 });
        Cookie.set('UserType', result.data.data[0].userType, { expires: 1 });  // 用户类型
      }
    },
    loginOut() {
      this.LoginInfo = undefined as any;
      Cookie.remove('LoginState');
      Cookie.remove('LoginInfo');
      Cookie.remove('UserType');
    }
  },
})
// 使用方法
// import { useStore } from '@/store/index'
// import { storeToRefs } from 'pinia'

// function getStore() {
//   const Test = useStore()
//   // Test.getAllArticleInfo()
//   const { AllArticleInfo } = storeToRefs(Test)
//   console.log(AllArticleInfo);
// }